Hi. I'm trying to write function to resizing images. Below is function which do that but only in x axis and scale = 50%, 25%, 12,5% etc. I need function resizing image in x and y axis with any scale. How to do that ? Thank for any help...

RGBA is my own structure
pBits - pointer to (oryginal) image's bits
pBitsNew - pointer to (resized) image's bits

Code:
BOOL epfBitmap::SetSize (int xSize, int ySize)
{
	BYTE * pBitsNew ;

	// Calculate bytes to allocate

	int iByteCount = ySize * (((xSize * iBitsPixel + 15) & ~15) >> 3) ;

	// Alocate momory for bits of new bitmap

	pBitsNew = (BYTE *) malloc (iByteCount) ;

	if (pBitsNew == NULL)
	{
		MessageBox (NULL, TEXT("Can't allocate memory!"), NULL, MB_OK | MB_ICONERROR) ;
		return FALSE ;
	}

	// Create RGBA pointers

	RGBA * pRGBANew = (RGBA *) pBitsNew ;
	RGBA * pRGBA    = (RGBA *) pBits ;

	// Resizing bitmap

	float fxScale = (float) cx / xSize ;
	float fyScale = (float) cy / ySize ;

	float fxScale2 = fxScale ;
	float fyScale2 = fyScale ;

	int iSumRed   = 0 ;
	int iSumGreen = 0 ;
	int iSumBlue  = 0 ;
	int iSumAlpha = 0 ;

	for (int y = 0; y < cy; y++)
	{
		for (int x = 0; x < cx; x++, pRGBA++)
		{
			if(fxScale2 <= 0)
			{
				fxScale2 = fxScale ;

				pRGBANew->rgbRed   = (int) ((float)iSumRed   / fxScale) ;
				pRGBANew->rgbGreen = (int) ((float)iSumGreen / fxScale) ;
				pRGBANew->rgbBlue  = (int) ((float)iSumBlue  / fxScale) ;
				pRGBANew->rgbAlpha = (int) ((float)iSumAlpha / fxScale) ;

				iSumRed   = 0 ;
				iSumGreen = 0 ;
				iSumBlue  = 0 ;
				iSumAlpha = 0 ;

				pRGBANew++ ;
			}
			
			fxScale2-- ;
			iSumRed   += pRGBA->rgbRed ;
			iSumGreen += pRGBA->rgbGreen ;
			iSumBlue  += pRGBA->rgbBlue ;
			iSumAlpha += pRGBA->rgbAlpha ;
		}
	}

	cx = xSize ;
	cy = ySize ;

	pBits = (BYTE *) realloc (pBits, iByteCount) ;

	pBits = pBitsNew ;

	return TRUE ;
}